package Objetos;

import Mundo.*;
import java.util.*;
import Personajes.*;
import java.awt.image.*;
import java.io.*;
import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.*;

public class Aldea implements Serializable {

    private int x;
    private int y;
    private int a;
    private int b;
    private int precio_total = 0;
    private ArrayList<Integer> armas;
    private ArrayList<Personaje> aldeanos;
    transient private BufferedImage sprite;

    public int getA() {
        return a;
    }

    public int getB() {
        return b;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    private int[] cantxtipo;
    private int numperdif;
    private String[] detalle_bat;

    public int[] getcantxtipos(){

        return cantxtipo;
    }


    public String[] forma_detalle(){
        Batallon bat = new Batallon(aldeanos);

        int detalle=0;

        cantxtipo= bat.get_tipos();

        if (!aldeanos.isEmpty()) {
            detalle = bat.get_numper();
        }

        detalle_bat=bat.obtener_detalle();


        numperdif=detalle;


        return detalle_bat;
    }
    public synchronized void recluta(Batallon bata, int tipo, int num){

        ArrayList<Personaje> alde = new ArrayList<Personaje>();

        for (int i=0; i<aldeanos.size();i++){

            if (num>0 && aldeanos.get(i).get_tipo()== tipo){

                bata.agregarPersonaje(aldeanos.get(i));
                num--;
            }
            else{

                alde.add(aldeanos.get(i));
            }
        }

        aldeanos=alde;
    }

    public String mostrarDetalle() {
        String detalle = "";
        Batallon bat = new Batallon(aldeanos);
        int pt = 0;
        if (!aldeanos.isEmpty()) {
            detalle = detalle + bat.imprime_resumen() + '\n';
        }
        ArrayList<Integer> armasDif = new ArrayList<Integer>();
        ArrayList<Integer> cantArm = new ArrayList<Integer>();
        for (int i = 0; i < this.armas.size(); i++) {
            //detalle=detalle+"Arma : "+ Armeria.getArma(this.armas.get(i)).getNombre()+ '\n';
            if (armasDif.contains(armas.get(i))) {
                cantArm.set(armasDif.indexOf(armas.get(i)), cantArm.get(armasDif.indexOf(armas.get(i))) + 1);
            } else {
                armasDif.add(armas.get(i));
                cantArm.add(1);
            }
            pt += Armeria.getArma(this.armas.get(i)).getPrecio();
        }
        for (int i = 0; i < armasDif.size(); i++) {
            detalle = detalle + "Arma : " + Armeria.getArma(armasDif.get(i)).getNombre() + "  x" + cantArm.get(i) + '\n';
        }

        if (!armas.isEmpty()) {
            detalle = detalle + "Precio total :" + pt + '\n' + '\n';

            this.precio_total = pt;
        }
        return detalle;
    }

    public int get_precio() {
        return this.precio_total;
    }

    public ArrayList<Personaje> getAldeanos() {
        return aldeanos;
    }

    public ArrayList<Integer> getArmas() {
        return armas;
    }

    public Aldea(int x, int y, int a, int b, Mapa map) {
        try {
            this.sprite = ImageIO.read(new File("aldea.png"));
        } catch (IOException ex) {
            Logger.getLogger(Aldea.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.x = x;
        this.y = y;
        this.a = a;
        this.b = b;
        this.aldeanos = new ArrayList();
        this.armas = new ArrayList();
        for (int i = y - b; i <= y + b; i++) {
            for (int j = x - a; j <= x + a; j++) {
                map.celdas[i][j].setElementoEnCelda('a');
                map.celdas[i][j].setSprite(sprite);
            }
        }
    }

    public void borraAldea(Mapa map) {
        for (int i = y - b; i <= y + b; i++) {
            for (int j = x - a; j <= x + a; j++) {
                map.celdas[i][j].setElementoEnCelda(' ');
                map.celdas[i][j].setSprite(null);
            }
        }
    }

    public boolean isVacia() {
        return aldeanos.isEmpty() && armas.isEmpty();
    }
    
    public void seteaSprite(Mapa map){
        try {
            this.sprite=ImageIO.read(new File("aldea.png"));
        } catch (IOException ex) {
            Logger.getLogger(Aldea.class.getName()).log(Level.SEVERE, null, ex);
        }
        for (int i = y - b; i <= y + b; i++) {
            for (int j = x - a; j <= x + a; j++) {
                map.celdas[i][j].setElementoEnCelda('a');
                map.celdas[i][j].setSprite(sprite);
            }
        }
    }
}
